Lisp_Object Qmodification_hooks;
Lisp_Object Qinsert_in_front_hooks;
Lisp_Object Qinsert_behind_hooks;
+Lisp_Object Qset_buffer_major_mode_hook;
static void alloc_buffer_text P_ ((struct buffer *, size_t));
static void free_buffer_text P_ ((struct buffer *b));
function = current_buffer->major_mode;
}
- if (NILP (function) || EQ (function, Qfundamental_mode))
- return Qnil;
-
count = SPECPDL_INDEX ();
- /* To select a nonfundamental mode,
- select the buffer temporarily and then call the mode function. */
+ /* To select a nonfundamental mode, select the buffer temporarily
+ and then call the mode function. Run the hook anyhow. */
record_unwind_protect (save_excursion_restore, save_excursion_save ());
Fset_buffer (buffer);
- call0 (function);
+ if (NILP (function) || EQ (function, Qfundamental_mode))
+ call0 (function);
+ Frun_hooks (1, &Qset_buffer_major_mode_hook);
return unbind_to (count, Qnil);
}
staticpro (&Qbefore_change_functions);
Qafter_change_functions = intern ("after-change-functions");
staticpro (&Qafter_change_functions);
+ Qset_buffer_major_mode_hook = intern ("set-buffer-major-mode-hook");
+ staticpro (&Qset_buffer_major_mode_hook);
Fput (Qprotected_field, Qerror_conditions,
Fcons (Qprotected_field, Fcons (Qerror, Qnil)));